package cn.mujiankeji.mbrowser.界面.小窗页

import android.content.Intent
import android.net.Uri
import android.provider.Settings
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.ModalBottomSheet
import androidx.compose.runtime.Composable
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import cn.mujiankeji.mbrowser.app.应用路由
import cn.mujiankeji.mbrowser.数据.枚举类.toStr
import cn.mujiankeji.mbrowser.数据.枚举类.下载器枚举
import cn.mujiankeji.mbrowser.数据.枚举类.主题颜色枚举
import cn.mujiankeji.mbrowser.数据.枚举类.功能枚举
import cn.mujiankeji.mbrowser.界面.框架.小窗视图.小窗状态
import cn.mujiankeji.mbrowser.数据.枚举类.应用页面枚举
import cn.mujiankeji.mbrowser.数据.枚举类.翻页动画枚举
import cn.mujiankeji.mbrowser.数据.枚举类.翻页手势识别枚举
import cn.mujiankeji.mbrowser.数据.配置项.应用配置

import cn.mujiankeji.mbrowser.界面.组件.配置列表.配置行_开关
import cn.mujiankeji.mbrowser.界面.组件.配置列表.配置行_提示
import cn.mujiankeji.mbrowser.界面.组件.配置列表.配置行_选项
import cn.mujiankeji.mbrowser.界面.组件.配置列表.配置行
import com.blankj.utilcode.util.Utils
import kotlinx.coroutines.runBlocking
import 界面.弹窗.下拉菜单项目

/**
 * @param 响应连带销毁 设置部分连带销毁
 */
class 设置小窗状态(val 内容类型 : 应用页面枚举 = 应用页面枚举.设置) : 小窗状态() {

}

@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun 设置小窗实现(state :设置小窗状态){
    ModalBottomSheet({
        state.销毁小窗()
    }) {
        when(state.内容类型){
            应用页面枚举.设置 -> {设置(state)}
            应用页面枚举.通用设置 -> { 通用设置(state) }
            应用页面枚举.显示设置 -> { 显示与偏好设置(state) }
            应用页面枚举.隐私设置 -> { 安全与隐私设置(state) }

            else -> {}
        }
    }
    /*底部窗口布局({state.销毁小窗()})
    {
        when(state.内容类型){
            应用页面枚举.设置 -> {设置(state)}
            应用页面枚举.通用设置 -> { 通用设置(state) }
            应用页面枚举.显示设置 -> { 显示与偏好设置(state) }
            应用页面枚举.隐私设置 -> { 安全与隐私设置(state) }

            else -> {}
        }
    }*/

}

@Composable
private fun 设置(state :设置小窗状态){
    var 显示清理缓存 by remember { mutableStateOf(false) }
    LazyColumn() {
        item {
            配置行("通用设置"){
                应用路由.加载(应用页面枚举.通用设置)
            }
        }

        item {
            配置行("显示与偏好"){
                应用路由.加载(应用页面枚举.显示设置)
            }
        }

        item {
            配置行("安全与隐私"){
                应用路由.加载(应用页面枚举.隐私设置)
            }
        }

        // --
        item {
            配置行_提示("管理")
        }

        item {
            配置行("快照管理"){
                应用路由.加载(应用页面枚举.快照管理)
            }
        }

        // 用户脚本管理
        item {
            配置行("搜索引擎管理"){
                应用路由.加载(应用页面枚举.搜索引擎管理)
            }
        }

        // 用户脚本管理
        item {
            配置行("用户脚本管理"){
                应用路由.加载(应用页面枚举.用户脚本管理)

            }
        }

        // 拦截规则管理
        item {
            配置行("拦截规则管理"){
                应用路由.加载(应用页面枚举.广告拦截管理)
            }
        }

        // --
        item {
            配置行_提示("其它")
        }

        // 清理缓存
        item {
            配置行("清理缓存"){
                显示清理缓存 = true
            }
        }

        // 关于软件
        item {
            配置行("关于软件"){
                应用路由.加载(应用页面枚举.关于页面)
            }
        }
    }

    // TODO 清理缓存窗口 -- 及其操作
    if (显示清理缓存){

    }
}

@Composable
private fun 通用设置(state: 设置小窗状态){
    LazyColumn() {
        // 默认标识 UA
        item {
            配置行("默认标识(UA)",应用配置.读取默认UA标识().collectAsState("").value){
                // TODO 标识窗口
            }
        }
        // 电脑版标识
        item {
            配置行("电脑版标识",应用配置.读取电脑版UA标识().collectAsState("").value){
                // TODO 标识窗口
            }
        }

        item { 配置行_提示("下载") }
        item { 配置行_选项("下载器",应用配置.读取下载器().collectAsState(下载器枚举.应用内置).value.toStr()){
            下拉菜单项目("应用内置"){
               runBlocking {  应用配置.设置下载器(下载器枚举.应用内置) }
                it()
            }
            下拉菜单项目("系统下载"){
                runBlocking {  应用配置.设置下载器(下载器枚举.系统下载) }
                it()
            }
            下拉菜单项目("IDM下载器"){
                runBlocking {  应用配置.设置下载器(下载器枚举.IDM) }
                it()
            }
            下拉菜单项目("ADM下载器"){
                runBlocking {  应用配置.设置下载器(下载器枚举.ADM) }
                it()
            }

        } }
        item { 配置行("存储位置",应用配置.路径_下载){} }

        // -- 搜索 --
        item { 配置行_提示("搜索") }
        item { 配置行_开关("输入补全 - 网络关键词",应用配置.读取输入补全网络关键词().collectAsState(true).value){
            runBlocking {
                应用配置.设置输入补全网络关键词(it)
            }
        } }
        item { 配置行_开关("输入补全 - 书签历史",应用配置.读取输入补全书签历史().collectAsState(true).value){
            runBlocking {
                应用配置.设置输入补全书签历史(it)
            }
        } }
        item { 配置行_提示("媒体") }
        // 视频长按倍速
        item {
            配置行_选项("视频长按倍速",
                应用配置.读取视频长按倍速().collectAsState(3.0f).value.toString()){
                下拉菜单项目("1.5"){
                    runBlocking { 应用配置.设置视频长按倍速(1.5f) }
                    it()
                }
                下拉菜单项目("2.0"){
                    runBlocking { 应用配置.设置视频长按倍速(2.0f) }
                    it()
                }
                下拉菜单项目("3.5"){
                    runBlocking { 应用配置.设置视频长按倍速(2.5f) }
                    it()
                }
                下拉菜单项目("3.0"){
                    runBlocking { 应用配置.设置视频长按倍速(3.0f) }
                    it()
                }
                下拉菜单项目("3.5"){
                    runBlocking { 应用配置.设置视频长按倍速(3.5f) }
                    it()
                }
                下拉菜单项目("4.0"){
                    runBlocking { 应用配置.设置视频长按倍速(4.0f) }
                    it()
                }
            }
        }

        item { 配置行_提示("其它") }
        item {
            配置行("设为默认浏览器"){
                // 跳转到系统默认浏览器设置界面
                val context = Utils.getApp().baseContext
                val intent = Intent(Settings.ACTION_MANAGE_DEFAULT_APPS_SETTINGS)
                // 某些 ROM 可能不支持上面这个 action，可以尝试跳转到应用详情页
                if (intent.resolveActivity(context.packageManager) != null) {
                    context.startActivity(intent)
                } else {
                    // 兜底：跳转到本应用详情页
                    val detailIntent = Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS)
                    detailIntent.data = Uri.parse("package:" + context.packageName)
                    context.startActivity(detailIntent)
                }
            }
        }

    }
}

@Composable
private fun 显示与偏好设置(string: 设置小窗状态){
    LazyColumn {
        // 主题颜色
        item {
            // TODO 未响应的界面
            配置行_选项("主题颜色",应用配置.读取主题颜色().collectAsState(主题颜色枚举.跟随系统).value
                .toStr()){ ondismiss->
                主题颜色枚举.entries.forEach { t->
                    下拉菜单项目(t.toStr()){
                        runBlocking { 应用配置.设置主题颜色(t) }
                        ondismiss()
                    }
                }
            }
        }

        // 全屏模式
        item {
            配置行_开关("全屏模式",应用配置.是否全屏模式().collectAsState(false).value){
                应用配置.设置全屏模式(it)
            }
        }

        // 边缘颜色跟随页面变化
        item {
            配置行_开关("边缘色跟随页面变化",应用配置.读取界面框架色跟随页面变化().collectAsState(true)
                .value){
                runBlocking { 应用配置.设置界面框架的跟随页面变化(it) }
            }
        }


        // -- 主页 --
        item { 配置行_提示("主页") }
        item { 配置行("主页定制"){
            // todo 主页定制
        } }
        // 上滑响应
        item {
            配置行_选项("上滑响应",应用配置.读取主页上滑响应功能().collectAsState(功能枚举.无)
                .value.toStr()){ ondis->
                功能枚举.entries.forEach {
                    下拉菜单项目(it.toStr()){
                        runBlocking { 应用配置.设置主页上滑响应功能(it) }
                        ondis()
                    }
                }
            }
        }

        // 下滑响应
        item {
            配置行_选项("下滑响应",应用配置.读取主页下滑响应功能().collectAsState(功能枚举.搜索)
                .value.toStr()){ ondis->
                功能枚举.entries.forEach {
                    下拉菜单项目(it.toStr()){
                        runBlocking { 应用配置.设置主页下滑响应功能(it) }
                        ondis()
                    }
                }
            }
        }


        // -- 网页 --
        item {
            配置行_提示("网页")
        }

        // 字体缩放
        item {
            配置行_选项("字体缩放",应用配置.读取浏览框字体缩放比例().collectAsState(100).value.toString()){
                // TODO AI 设置缩放比例，  50 - 200
            }
        }

        // 下拉刷新
        /*item {
            // TODO 未响应到功能
            配置行_开关("下拉刷新",应用配置.读取浏览框下拉刷新().collectAsState(false).value){
                runBlocking {
                    应用配置.设置浏览框下拉刷新(it)
                }
            }
        }*/

        // 无图模式
        item {
            配置行_开关("无图模式",应用配置.读取浏览框无图模式().collectAsState(false).value){
                runBlocking {
                    应用配置.设置浏览框模式(it)
                }
            }
        }


        // -- 偏好 --
        item { 配置行_提示("偏好") }
        // 手势前进后退动画
        item {
            // TODO 未响应到功能
            配置行_选项("手势前进后退动画",
                应用配置.读取手势翻页动画().collectAsState(翻页动画枚举.翻页).value.toStr()){ ondis->
                翻页动画枚举.entries.forEach {
                下拉菜单项目(it.toStr()){
                    runBlocking {
                        应用配置.设置手势翻页动画(it)
                        ondis()
                    }
                }
            }
            }
        }

        // 滑屏前进后退
        item {
            // TODO 未响应到功能
            配置行_选项("滑屏前进后退",
                应用配置.读取滑屏翻页识别方式().collectAsState(翻页手势识别枚举.智能识别).value.toStr()){
                ondis->
                翻页手势识别枚举.entries.forEach {
                    下拉菜单项目(it.toStr()){
                        runBlocking {
                            应用配置.设置滑屏翻页识别方式(it)
                            ondis()
                        }
                    }
                }
            }
        }

        // 启动时打开上次未正常关闭页面
        item {
            // TODO 未响应到功能
            配置行_开关("启动时打开上次未正常关闭页面",
                应用配置.读取启动时打开上次未关闭页面().collectAsState(false).value){
                runBlocking {
                    应用配置.设置启动时打开上次未关闭页面(it)
                }
            }
        }

    }

}

@Composable
private fun 安全与隐私设置(state : 设置小窗状态){
    LazyColumn {

        // 无痕模式
        item {
            配置行_开关("无痕模式",应用配置.读取无痕模式().collectAsState(false).value){
                runBlocking {
                    应用配置.设置无痕模式(it)
                }
            }
        }

        // 强制SSL安全检测
        item {
            配置行_开关("强制SSL安全检测",应用配置.读取浏览框强制SSL检测().collectAsState(false).value){
                runBlocking {
                    应用配置.设置浏览框强制SSL检测(it)
                }
            }
        }

        // 其它
        item {
            配置行_开关("网页异常警示",应用配置.读取网页内容合规检测().collectAsState(true).value){
                runBlocking {
                    应用配置.设置网页内容合规检测(it)
                }
            }
        }

    }
}




